using System;
using Sinacor.Infra.UI.Common;
using System.ComponentModel;
using System.ServiceModel;
using Sinacor.Infra.UI.Security.Services;
using System.Collections.Generic;
using Sinacor.UI.Bovespa.Corretagem.Communication.Bovespa.Corretagem.FaixaCorretagem;

namespace Sinacor.UI.Bovespa.Corretagem.Communication
{
    /// <summary>
    /// Faixa Corretagem
    /// </summary>
    public class FaixaCorretagem : BaseCommunication
    {
        #region Constructor
        /// <summary>
        /// Faixa Corretagem
        /// </summary>
        /// <param name="sessionInformation"></param>
        public FaixaCorretagem(SessionInformation sessionInformation)
            : base(sessionInformation)
        {           
        }

        #endregion
        #region Métodos

        /// <summary>
        /// Método AlterarFaixaCorretagem
        /// </summary>
        public void AlterarFaixaCorretagem(Model.FaixaCorretagem model)
        {
            /*
            Altera uma faixa de corretagem
            */

            IFaixaCorretagem servico = null;

            try
            {
                using (ServiceInstance<IFaixaCorretagem> service = new ServiceInstance<IFaixaCorretagem>())
                {
                    servico = service.TryGetInstance(this.Session);
                    servico.AlterarFaixaCorretagem(new Translator.ModelToDataContract.FaixaCorretagem().ToFaixaCorretagemRequest(model));
                }
            }
            catch(Exception ex)
            {
                base.HandleFault(ex);
            }
            
            
        }

        /// <summary>
        /// Método ConsultarFaixasCorretagens
        /// </summary>
        public ModelCollection<Model.FaixaCorretagem> ConsultarFaixasCorretagens(Model.Parameter.FiltroFaixaCorretagem model)
        {
            /*
            Consulta faixas de corretagem
            */
            IFaixaCorretagem servico = null;

            ModelCollection<Model.FaixaCorretagem> responses = null;

            try
            {
                using (ServiceInstance<IFaixaCorretagem> service = new ServiceInstance<IFaixaCorretagem>())
                {
                    servico = service.TryGetInstance(this.Session);

                    responses = new Translator.DataContractToModel.FaixaCorretagem().ToFaixaCorretagem(servico.ConsultarFaixasCorretagens(new Translator.ModelToDataContract.FaixaCorretagem().ToFiltroFaixaCorretagemRequest(model)));
                }

                
            }
            catch(Exception ex)
            {
                base.HandleFault(ex);
            }

            return responses;
            
        }

        /// <summary>
        /// Método ExcluirFaixaCorretagem
        /// </summary>
        public void ExcluirFaixaCorretagem(Model.Parameter.FiltroFaixaCorretagemChave model)
        {
            /*
            Exclui uma faixa de corretagem
            */
            IFaixaCorretagem servico = null;

            try
            {
                using (ServiceInstance<IFaixaCorretagem> service = new ServiceInstance<IFaixaCorretagem>())
                {
                    servico = service.TryGetInstance(this.Session);
                    servico.ExcluirFaixaCorretagem(new Translator.ModelToDataContract.FaixaCorretagem().ToFiltroFaixaCorretagemChaveRequest(model));
                }
            }
            catch(Exception ex)
            {
                base.HandleFault(ex);
            }
            
            
        }

        /// <summary>
        /// Método IncluirFaixaCorretagem
        /// </summary>
        public void IncluirFaixaCorretagem(Model.FaixaCorretagem model)
        {
            /*
            Inclui uma nova faixa de corretagem
            */
            IFaixaCorretagem servico = null;

            try
            {
                using (ServiceInstance<IFaixaCorretagem> service = new ServiceInstance<IFaixaCorretagem>())
                {
                    servico = service.TryGetInstance(this.Session);
                    servico.IncluirFaixaCorretagem(new Translator.ModelToDataContract.FaixaCorretagem().ToFaixaCorretagemRequest(model));
                }
            }
            catch(Exception ex)
            {
                base.HandleFault(ex);
            }
            
            
        }

        /// <summary>
        /// Método ObterFaixaCorretagem
        /// </summary>
        public Model.FaixaCorretagem ObterFaixaCorretagem(Model.Parameter.FiltroFaixaCorretagemChave model)
        {
            /*
            Obtem uma faixa de corretagem
            */
            IFaixaCorretagem servico = null;

            Model.FaixaCorretagem response = null;

            try
            {
                using (ServiceInstance<IFaixaCorretagem> service = new ServiceInstance<IFaixaCorretagem>())
                {
                    servico = service.TryGetInstance(this.Session);

                    response = new Translator.DataContractToModel.FaixaCorretagem().ToFaixaCorretagem(servico.ObterFaixaCorretagem(new Translator.ModelToDataContract.FaixaCorretagem().ToFiltroFaixaCorretagemChaveRequest(model)));
                }
            }
            catch(Exception ex)
            {
                base.HandleFault(ex);
            }

            return response;
        }

        /// <summary>
        /// Método ObterUltimaFaixaCorretagem
        /// </summary>
        public Model.FaixaCorretagem ObterUltimaFaixaCorretagem(Model.Parameter.FiltroFaixaCorretagemChave model)
        {
            /*
            Obtem a ultima faixa de corretagem baseado na data inicial
            */
            IFaixaCorretagem servico = null;

            Model.FaixaCorretagem response = null;

            try
            {
                using (ServiceInstance<IFaixaCorretagem> service = new ServiceInstance<IFaixaCorretagem>())
                {
                    servico = service.TryGetInstance(this.Session);

                    response = new Translator.DataContractToModel.FaixaCorretagem().ToFaixaCorretagem(servico.ObterUltimaFaixaCorretagem(new Translator.ModelToDataContract.FaixaCorretagem().ToFiltroFaixaCorretagemChaveRequest(model)));
                }
            }
            catch(Exception ex)
            {
                base.HandleFault(ex);
            }

            return response;
        }
#endregion
    }
}
    